home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 2003 August / MW 8 2003 CD1.iso / Inside Macworld / Product News / gimp-1.2.4.sit / gimp-1.2.4 / plug-ins / perl / examples / randomart1 < prev    next >
Encoding:
Text File  |  2000-05-21  |  2.9 KB  |  93 lines

  1. #!/usr/app/bin/perl
  2.  
  3. eval 'exec /usr/app/bin/perl  -S $0 ${1+"$@"}'
  4.     if 0; # not running under some shell
  5.  
  6. use Gimp;
  7. use Gimp::Fu;
  8.  
  9. # Definiere die Konstante "pi mal zwei"
  10. use constant PIx2 => 8 * atan2 1,1;
  11.  
  12. register "random_art_1",            # Funktionsname
  13.          "Create a Random Tile",        # Kurzhilfe
  14.          "Create a tileable image by repeatedly drawing colourful polygons",
  15.                              # Hilfetext
  16.          "Marc Lehmann",            # Autor
  17.          "Marc Lehmann <pcg\@goof.com",        # Copyright
  18.          "0.3a",                # Version/Datum
  19.          N_"<Toolbox>/Xtns/Render/Random Art #1...",    # Men¸pfad
  20.          "",                    # Bildtypen
  21.          # Eingabeparameter
  22.          # Typ        Name        Beschreibung        Wert
  23.          [
  24.           [PF_INT32,    'width',    'Image Width',         300],
  25.           [PF_INT32,    'height',    'Image Height',         300],
  26.           [PF_SLIDER,    'num_poly',    'Number of Polygons',     20, [5,100,1]],
  27.           [PF_SLIDER,    'edges',    'Number of Edges',      10, [3, 30, 1]],
  28.           [PF_SLIDER,    'revolutions',    'Number of Revolutions',1, [1, 3, 1]],
  29.           [PF_SLIDER,    'feather',    'Feather Radius',    30, [1, 100]],
  30.           [PF_BOOL,    'supersample',    'Adaptive Supersampling?', 0],
  31.          ],
  32.          [PF_IMAGE],
  33.          sub {                    # Perl-Code
  34.    # Die Parameter werden ganz "normal" ¸bergeben:
  35.    my ($w,$h,$num_poly,$edges,$revolutions,$feather,$super)=@_;
  36.  
  37.    # Erzeuge ein neues Bild
  38.    my $image = new Image($w,$h,RGB);
  39.    $image->undo_disable;
  40.  
  41.    # Erzeuge die erste Ebene f¸r das Bild
  42.    my $layer = $image->layer_new($w,$h,RGB_IMAGE,
  43.                    "Random Art #1",100,NORMAL_MODE);
  44.  
  45.    # F¸ge sie in das Bild ein
  46.    $image->add_layer($layer,0);
  47.  
  48.    # Setze die Hintergrundfarben
  49.    Palette->set_background('white');
  50.  
  51.    # ...und lˆsche die Ebene damit
  52.    $layer->fill(BG_IMAGE_FILL);
  53.  
  54.    # Jetzt wurde ein neues, leeres Bild erzeugt, und
  55.    # das Zeichnen kann beginnen.
  56.  
  57.    # Erzeuge zuf‰llige Polygone, f¸lle sie mit einem
  58.    # zuf‰lligen Farbgradienten und verschiebe das Bild
  59.    # wiederholt.
  60.    for (1..$num_poly) {
  61.       my @ecken;
  62.       for (1..$edges*$revolutions) {
  63.          my $r = rand(0.4)+0.1;
  64.          push(@ecken, $w/2+sin($_*PIx2/$edges)*$r*$w,
  65.                       $h/2+cos($_*PIx2/$edges)*$r*$h);
  66.       }
  67.  
  68.       # Selektiere die Region
  69.       $image->free_select (\@ecken, REPLACE, 1, 1, $feather);
  70.  
  71.       # W‰hle zuf‰llig zwei Farben aus
  72.       Palette->set_foreground([rand(256),rand(256),rand(256)]);
  73.       Palette->set_background([rand(256),rand(256),rand(256)]);
  74.       
  75.       # Un erzeuge einen Farbverlauf ¸ber das Bild
  76.       $layer->blend (FG_BG_HSV, DIFFERENCE_MODE, LINEAR, 100,
  77.                      0, REPEAT_TRIANGULAR, $super, 2, 3,
  78.                      $w/2, $h/2,
  79.                      rand($w), rand($h));
  80.       
  81.       # Und dann verschiebe das Bild etwas
  82.       $layer->channel_ops_offset (1,0,(rand(0.8)+0.1)*$w,(rand(0.8)+0.1)*$h);
  83.    }
  84.  
  85.    $image->undo_enable;
  86.  
  87.    # Gib das neu erzeugte Bild zur¸ck, damit es angezeigt wird.
  88.    $image;
  89. };
  90.  
  91. exit main;
  92.  
  93.